/*#ifdef APP-PLUS*/
console.log('当前环境：APP端')
/*#endif*/

/*#ifdef H5*/
console.log('当前环境：H5端')
/*#endif*/

/*#ifdef MP*/
console.log('当前环境：微信小程序端')
/*#endif*/



/*
 * 一、APP更新检测
 */
// type  1手动点击更新  0是自动检查
export function checkAppUpdate(update_info, type = 0) {
	return new Promise((reolve, reject) => {
		// 获取版本号
		plus.runtime.getProperty(plus.runtime.appid, async (inf) => {
			console.log('当前版本', inf.version);
			console.log('最新版本', update_info.version);
			// 检查是否需要升级（对比版本号）
			let need_update = await compareVersion(inf.version, update_info.version);
			//不需要更新
			if (!need_update) {
				return reolve({
					msg: "已经是最新版本了"
				})
			}
			//需要更新，判断是不是静默更新
			if (/\.wgt$/.test(update_info.now_url) && update_info.silent == 1) {
				console.log("静默更新");
				if (type == 1) {
					return reolve({
						msg: "已经是最新版本了"
					})
				}
				startSilentUpdate(update_info.now_url); //开始静默更新
				return reolve({
					msg: ""
				})
			}

			//判断当前版本是不是点击过暂不更新
			let update_ignore_version = uni.getStorageSync("update_ignore") || "0.0.0";
			console.log("强制更新", update_info.force);
			if (type === 0 &&
				update_ignore_version == update_info.version &&
				update_info.force === 0) {
				console.log("之前取消过这个版本，就不再提示了");
				return reolve({
					msg: ''
				})
			}

			//弹出更新提示框
			uni.navigateTo({
				url: "/pages/versionUpdate/versionUpdate?updata_info=" + JSON.stringify(
					update_info),
				animationType: "fade-in"
			})
		});
	})
}
// 对比版本号
function compareVersion(ov, nv) {
	return new Promise((reolve, reject) => {
		if (!ov || !nv || ov == "" || nv == "") {
			return reolve(false);
		}
		let b = false;
		let ova = ov.split(".", 4);
		let nva = nv.split(".", 4);
		for (let i = 0; i < ova.length && i < nva.length; i++) {
			let so = ova[i],
				no = parseInt(so),
				sn = nva[i],
				nn = parseInt(sn);
			if (nn > no || sn.length > so.length) {
				return reolve(true);
			} else if (nn < no) {
				return reolve(false);

			}
		}
		if (nva.length > ova.length && 0 == nv.indexOf(ov)) {
			return reolve(true);
		} else {
			return reolve(false);
		}
	})
}
// 开始静默更新
function startSilentUpdate(url) {
	let options = {
		method: "get"
	};
	console.log("开始静默更新", url);
	let dtask = plus.downloader.createDownload(url, options);
	dtask.addEventListener("statechanged", function(task, status) {
		if (status === null) {} else if (status == 200) {
			// ！！！！！！在这里打印会不停的执行，请注意，正式上线切记不要在这里打印东西！！！！！！
			switch (task.state) {
				case 4:
					console.log("下载结束", task.filename);
					installWgt(task.filename); // 安装  
					break;
			}
		}
	});
	dtask.start();
}
// 安装文件
function installWgt(path) {
	plus.runtime.install(path);
}


/**
 * 二、小程序更新检测
 */
export function checkMircoAppUpdate() {
	var that = this
	if (uni.canIUse('getUpdateManager')) {
		const updateManager = uni.getUpdateManager()
		updateManager.onCheckForUpdate(function(res) {
			if (res.hasUpdate) {
				uni.showModal({
					title: '更新提示',
					content: '检测到新版本，是否下载新版本并重启小程序？',
					// showCancel:false,//隐藏取消按钮
					success: function(res) {
						if (res.confirm) {
							downLoadAndUpdate(updateManager) //下载新版本，并重新应用
						} else if (res.cancel) { //用户点击取消按钮的处理，如果需要强制更新，则给出二次弹窗，如果不需要，则这里的代码都可以删掉了
							uni.showModal({
								title: '温馨提示~',
								content: '本次版本更新涉及到新的功能添加，旧版本无法正常访问的哦~',
								showCancel: false, //隐藏取消按钮
								confirmText: "确定更新", //只保留确定更新按钮
								success: function(res) {
									if (res.confirm) {
										downLoadAndUpdate(updateManager) //下载新版本，并重新应用
									}
								}
							})
						}
					}
				})
			}
		})
	} else {
		// 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
		uni.showModal({
			title: '提示',
			content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
		})
	}
}
//下载小重启小程序
function downLoadAndUpdate(updateManager) {
	var that = this
	uni.showLoading();
	//静默下载更新小程序新版本
	updateManager.onUpdateReady(function() {
		uni.hideLoading()
		//新的版本已经下载好，调用 applyUpdate 应用新版本并重启
		updateManager.applyUpdate()
	})
	updateManager.onUpdateFailed(function() {
		// 新的版本下载失败
		uni.showModal({
			title: '已经有新版本了哟~',
			content: '新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~',
		})
	})
}